package com.yuanzong.wuliu.common.vo;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageInfo;
import lombok.Data;

import java.util.List;

@Data
public class ApiResultPage<E> {

    // 当前请求页
    private int current;

    // 每页大小
    private int size;

    // 总记录数
    private long total;

    // 记录结果
    private List<E> records;

    // 其他数据
    private Object otherData;

    public ApiResultPage() {

    }

    public ApiResultPage(int pageNum, int pageSize) {
        this.current = pageNum;
        this.size = pageSize;
    }

    /**
     * @return
     */
    public static ApiResultPage create() {
        return new ApiResultPage();
    }

    /**
     * @return
     */
    public static ApiResultPage create(int pageNum, int pageSize) {
        return new ApiResultPage(pageNum, pageSize);
    }

    /**
     * 将Mybatis-plus分页插件（com.baomidou.mybatisplus.extension.plugins.pagination.Page）转换
     *
     * @param pageNum
     * @param pageSize
     * @param page
     * @param <E>
     * @return
     */
    public static <E> ApiResultPage<E> create(int pageNum, int pageSize, Page<E> page) {
        ApiResultPage<E> pageList = ApiResultPage.create(pageNum, pageSize);
        pageList.setTotal(page.getTotal());
        pageList.setRecords(page.getRecords());
        return pageList;
    }

    /**
     * 将Mybatis分页插件（com.github.pagehelper）转换
     *
     * @param pageNum
     * @param pageSize
     * @param pageInfo
     * @param <E>
     * @return
     */
    public static <E> ApiResultPage<E> create(int pageNum, int pageSize, PageInfo<E> pageInfo) {
        ApiResultPage<E> pageList = ApiResultPage.create(pageNum, pageSize);
        if (pageInfo != null) {
            pageList.setTotal(pageInfo.getTotal());
            pageList.setRecords(pageInfo.getList());
        }
        return pageList;
    }

    public static <E> ApiResultPage<E> create(int pageNum, int pageSize, long total, List<E> records) {
        ApiResultPage<E> pageList = ApiResultPage.create(pageNum, pageSize);
        pageList.setTotal(total);
        pageList.setRecords(records);
        return pageList;
    }

}
